package com.labi.designpattern.sale;

import org.springframework.stereotype.Service;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

@Service
public class SaleService {
    Map<String, CalcStrategySerivce> map = new HashMap<>();

    /**
     * 这里是构造函数
     * 这里就牛逼了。基于spring的特性， 该类在spring容器中构造的时候，参数是list<interface>
     * 那么，spring就会把这个interface所有的impl实现类都初始化到list中。
     *
     * @param calcStrategySerivceList
     */
    public SaleService(List<CalcStrategySerivce> calcStrategySerivceList) {
        for (CalcStrategySerivce calcStrategySerivce : calcStrategySerivceList) {
            map.put(calcStrategySerivce.type(), calcStrategySerivce);
        }
    }

    public double sale(String type, double oriFee) {
        return map.get(type).getPrice(oriFee);
    }
}
